package com.sqlcheck.service;

import java.io.File;
import java.util.List;

/**
 * Git仓库管理服务接口
 */
public interface GitRepositoryService {

    /**
     * 克隆Git仓库
     * 
     * @param repositoryUrl 仓库URL
     * @param branch        分支名称
     * @param accessToken   访问令牌（用于私有仓库）
     * @param targetDir     目标目录
     * @return 克隆后的本地目录
     */
    File cloneRepository(String repositoryUrl, String branch, String accessToken, String targetDir);

    /**
     * 更新已存在的仓库
     * 
     * @param localRepoDir 本地仓库目录
     * @param branch       分支名称
     * @return 是否更新成功
     */
    boolean updateRepository(File localRepoDir, String branch);

    /**
     * 删除本地仓库目录
     * 
     * @param localRepoDir 本地仓库目录
     * @return 是否删除成功
     */
    boolean deleteRepository(File localRepoDir);

    /**
     * 获取仓库的当前分支
     * 
     * @param localRepoDir 本地仓库目录
     * @return 当前分支名称
     */
    String getCurrentBranch(File localRepoDir);

    /**
     * 获取仓库的所有分支
     * 
     * @param localRepoDir 本地仓库目录
     * @return 分支列表
     */
    List<String> getAllBranches(File localRepoDir);

    /**
     * 切换到指定分支
     * 
     * @param localRepoDir 本地仓库目录
     * @param branch       分支名称
     * @return 是否切换成功
     */
    boolean checkoutBranch(File localRepoDir, String branch);

    /**
     * 获取最新提交信息
     * 
     * @param localRepoDir 本地仓库目录
     * @return 提交ID
     */
    String getLatestCommit(File localRepoDir);

    /**
     * 验证目录是否为有效的Git仓库
     * 
     * @param dir 目录
     * @return 是否为Git仓库
     */
    boolean isGitRepository(File dir);

    /**
     * 清理Git资源
     * 
     * @param taskId 任务ID
     */
    void cleanupGitResources(Long taskId);
}